﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using Entidades.Seguridad;
using Entidades.Sistema.Base;
using Modelo.Sistema.Base;

namespace VistaOnlineR1._1.Controllers.Sistema.Base
{
    public class BarrioController : BaseController
    {
        #region campos
        CatalogoBarrio _catalogoBarrios;
        CatalogoProvincia _catalogoProvincia;
        CatalogoLocalidad _catalogoLocalidad;
        #endregion

        #region Constructors
        public BarrioController()
            : this(new CatalogoBarrio(), new CatalogoProvincia(), new CatalogoLocalidad())
        {
        }

        public BarrioController(CatalogoBarrio catalogoBarrios, CatalogoProvincia catalogoProvincia, CatalogoLocalidad catalogoLocalidad)
        {
            _catalogoBarrios = catalogoBarrios;
            _catalogoProvincia = catalogoProvincia;
            _catalogoLocalidad = catalogoLocalidad;
        }
        #endregion

        public ActionResult Index()
        {
            List<Perfil> perfiles = RecuperarPerfil();

            ViewBag.PermisoDelete = perfiles.Exists(per => per.Permiso.Nombre == "Delete");
            ViewBag.PermisoCreate = perfiles.Exists(per => per.Permiso.Nombre == "Create");
            ViewBag.PermisoEdit = perfiles.Exists(per => per.Permiso.Nombre == "Edit");

            ViewBag.Provincia = _catalogoProvincia.ListarProvincia();
            ViewBag.Localidad = _catalogoLocalidad.ListarLocalidad();

            return View(_catalogoBarrios.ListarBarrio());
        }


        [ValidateInput(false)]
        public ActionResult EditBarrioPartial()
        {
            List<Perfil> perfiles = RecuperarPerfil();

            ViewBag.PermisoDelete = perfiles.Exists(per => per.Permiso.Nombre == "Delete");
            ViewBag.PermisoCreate = perfiles.Exists(per => per.Permiso.Nombre == "Create");
            ViewBag.PermisoEdit = perfiles.Exists(per => per.Permiso.Nombre == "Edit");
            ViewBag.Provincia = _catalogoProvincia.ListarProvincia();
            ViewBag.Localidad = _catalogoLocalidad.ListarLocalidad();

            return PartialView("EditBarrioPartial", _catalogoBarrios.ListarBarrio());
        }

        [HttpPost, ValidateInput(false)]
        public ActionResult EditBarrioAddNewPartial(Barrio Barrio)
        {
            if (ModelState.IsValid)
            {
                try
                {
                    _catalogoBarrios.AgregarBarrio(Barrio);
                }
                catch (Exception e)
                {
                    ViewData["EditError"] = e.Message;
                }
            }
            else
                ViewData["EditError"] = "Por Favor, modifica los errores.";

            List<Perfil> perfiles = RecuperarPerfil();

            ViewBag.PermisoDelete = perfiles.Exists(per => per.Permiso.Nombre == "Delete");
            ViewBag.PermisoCreate = perfiles.Exists(per => per.Permiso.Nombre == "Create");
            ViewBag.PermisoEdit = perfiles.Exists(per => per.Permiso.Nombre == "Edit");
            ViewBag.Provincia = _catalogoProvincia.ListarProvincia();
            ViewBag.Localidad = _catalogoLocalidad.ListarLocalidad();

            return PartialView("EditBarrioPartial", _catalogoBarrios.ListarBarrio());
        }
        [HttpPost, ValidateInput(false)]
        public ActionResult EditBarrioUpdatePartial(Barrio Barrio)
        {
           
            if (ModelState.IsValid)
            {
                try
                {
                    _catalogoBarrios.ModificarBarrio(Barrio);
                }
                catch (Exception e)
                {
                    ViewData["EditError"] = e.Message;
                }
            }
            else
                ViewData["EditError"] = "Por Favor, modifica los errores.";

            List<Perfil> perfiles = RecuperarPerfil();

            ViewBag.PermisoDelete = perfiles.Exists(per => per.Permiso.Nombre == "Delete");
            ViewBag.PermisoCreate = perfiles.Exists(per => per.Permiso.Nombre == "Create");
            ViewBag.PermisoEdit = perfiles.Exists(per => per.Permiso.Nombre == "Edit");
            ViewBag.Provincia = _catalogoProvincia.ListarProvincia();
            ViewBag.Localidad = _catalogoLocalidad.ListarLocalidad();

            return PartialView("EditBarrioPartial", _catalogoBarrios.ListarBarrio());
        }
        [HttpPost, ValidateInput(false)]
        public ActionResult EditBarrioDeletePartial(int IdBarrio)
        {
            if (IdBarrio >= 0)
            {
                try
                {
                    _catalogoBarrios.EliminarBarrio(_catalogoBarrios.BuscarBarrio(IdBarrio));
                }
                catch (Exception e)
                {
                    ViewData["EditError"] = e.Message;
                }
            }

            List<Perfil> perfiles = RecuperarPerfil();

            ViewBag.PermisoDelete = perfiles.Exists(per => per.Permiso.Nombre == "Delete");
            ViewBag.PermisoCreate = perfiles.Exists(per => per.Permiso.Nombre == "Create");
            ViewBag.PermisoEdit = perfiles.Exists(per => per.Permiso.Nombre == "Edit");
            ViewBag.Provincia = _catalogoProvincia.ListarProvincia();
            ViewBag.Localidad = _catalogoLocalidad.ListarLocalidad();

            return PartialView("EditBarrioPartial", _catalogoBarrios.ListarBarrio());
        }

    }
}
